# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# File       : seaweedCarbonSink.py
# Time       ：2022/6/12 9:38
# Author     ：author name
# version    ：python 3.8
# Description：
    大型藻类碳汇(seaweedCarbonSink):利用大型藻类从空气或海洋中吸收并固定二氧化碳的过程、活动、机制和能力。
"""


def carbonSequestration(methods, ls , r=12/44):
    """
        碳汇量Carbon sequestration
        输出：
            D_Csink_s:在大型藻类养殖周期内二氧化碳的碳汇量，吨每公顷每年（t/hm^2*a）
        输入：
            r:碳与二氧化碳的转换系数，即碳元素在二氧化碳分子中的质量比例12/44
    """
    ls1 = []
    print(ls)
    for i in range(9):
        ls1.append(float(ls[i]))  # 转换为浮点数
    print(ls1)
    N_sq,W_si,C_sa,W_t,R_dw,W_sy,R_ssdw,C_aa,T = ls1[:]



    methods = str(methods)

    def seedingCarbon(methods, N_sq, W_si, C_sa, W_t, R_dw):
        """
            幼苗初始投放碳储量Seedlings of carbon
            输出：
                C_ss:单位面积养殖大型藻类幼苗碳量，吨每公顷（t/hm^2）

        """

        def fangFa1(N_sq, W_si, C_sa):
            """
                按照数量计量
                输出：
                    C_ss:单位面积养殖大型藻类幼苗碳量，吨每公顷（t/hm^2）
                输入：
                    N_sq:单位面积幼苗数量，株每公顷（ind/hm^2）
                    W_si:幼苗个体干重，克每株（g/ind）
                    C_sa:幼苗含碳率
            """
            C_ss = N_sq * W_si * C_sa * 10 ** (-6)
            return C_ss

        def fangFa2(W_t, R_dw, C_sa):
            """
                按照生物量计量
                输出：
                    C_ss:单位面积养殖大型藻类幼苗碳量，吨每公顷（t/hm^2）
                输入：
                    W_t:幼苗总生物量（鲜重），千克每公顷（ka/hm^2）
                    R_dw:幼苗干湿比
                    C_sa:幼苗含碳率
            """
            C_ss = W_t * R_dw * C_sa * 10 ** (-3)
            return C_ss

        if methods == '1':
            C_ss = fangFa1(N_sq, W_si, C_sa)
            return C_ss
        elif methods == '2':
            C_ss = fangFa2(W_t, R_dw, C_sa)
            return C_ss

    def adultCarbon(W_sy, R_ssdw, C_aa):
        """
            藻类成体收获碳储量
            输出：
                C_sh:单位面积养殖大型藻类收获的碳量，吨每公顷（t/hm^2）
            输入：
                W_sy:单位养殖面积成藻的产量，吨每公顷（t/hm^2）
                R_sswd:收获时大型藻类成藻的干湿比
                C_aa:成藻的含碳率
        """
        return W_sy * R_ssdw * C_aa

    def changeInCarbonSPUT(C_sh, C_ss, T):
        """
            单位时间内碳储量变化（ChangeInCarbonSPUT）
            Change in carbon storage per unit time
            注：不满一年为一年
            输出：
                D_CS：养殖周期内大型藻类碳储量的变化，吨每公顷年（t/(hm^2*a）
            输入：
                C_sh, C_ss
                T:大型藻类养殖周期，即从幼苗到收获成藻的时间,年（a）
        """
        try:
            D_Cs = (C_sh - C_ss) / T
        except:
            print('碳汇量计算有误，请检查输入。。。')
        return D_Cs

    C_sh = adultCarbon(W_sy, R_ssdw, C_aa)
    C_ss = seedingCarbon(methods, N_sq, W_si, C_sa, W_t, R_dw)
    D_Cs = changeInCarbonSPUT(C_sh, C_ss, T)  # 单位时间碳储量变化
    D_C_sink_s = D_Cs / r
    print(C_sh,C_ss,D_Cs,D_C_sink_s)
    return D_C_sink_s


def totalCarbonSequestration(D_C_sink_si, A_si, n=1):
    """
        总碳汇量：totalCarbonSequestration
        输出：
            D_CsinksT：养殖区内大型藻的二氧化碳总碳汇量，吨每年（t/a）
        输入：
            D_Csinksi：养殖i种大型藻类的二氧化碳碳汇量，吨每公顷每年（t/(hm^2*a)）
            A_si:养殖i种大型藻类的面积，公顷（hm^2）
    """
    D_CsinksT = 0
    for i in range(n):
        D_CsinksT += D_C_sink_si[i] * A_si[i]
    return D_CsinksT